//
//  FXComposeToolBar.swift
//  微博(Swift)
//
//  Created by V on 16/1/8.
//  Copyright © 2016年 V. All rights reserved.
//

import UIKit


enum FXComposeToolBarButtonType: Int {
    case Picture = 1000
    case Mention = 1001
    case Trend = 1002
    case Emoticon = 1003
    case Add = 1004
}



class FXComposeToolBar: UIStackView {
    
    // MARK: -  属性
    var buttonClickCloures: ((type: FXComposeToolBarButtonType) -> ())?
    var isSystemKeyboard: Bool = true {
        didSet {
            let button = viewWithTag(FXComposeToolBarButtonType.Emoticon.rawValue) as! UIButton
            // 设置图片的默认名字
            var imageNamed = "compose_keyboardbutton_background"
            if isSystemKeyboard {
                // 如果是系统键盘，更改图片名字
                imageNamed = "compose_emoticonbutton_background"
            }
            button.setImage(UIImage(named: imageNamed), forState: UIControlState.Normal)
            button.setImage(UIImage(named: "\(imageNamed)_highlighted"), forState: UIControlState.Highlighted)
        }
    }
    
    
    
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        setupUI()
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    
    
    private func setupUI(){
        // 设置子控件大小相等，并填充父控件
        distribution = UIStackViewDistribution.FillEqually
        // 在 toolBar 上边添加button
        addChildButton("compose_toolbar_picture", type: .Picture)
        addChildButton("compose_mentionbutton_background", type: .Mention)
        addChildButton("compose_trendbutton_background",type: .Trend)
        addChildButton("compose_emoticonbutton_background", type: .Emoticon)
        addChildButton("compose_add_background", type: .Add)
    }
    
    // 添加 4 个Button
    private func addChildButton(imgNamed: String, type: FXComposeToolBarButtonType){
        let button = UIButton()
        // 添加按钮点击事件：1. 因为创建 button 的时候是同用这一个方法创建的，如果添加单击事件，就要考虑到怎么区别 toolBar 上边的四个按钮点击时执行不同的方法。 2. 解决方法是：通过设置不同 button 的 tag 来区分不同的点击事件
        button.addTarget(self, action: "childButtonClick:", forControlEvents: .TouchUpInside)
        button.tag = type.rawValue
        button.setImage(UIImage(named: imgNamed), forState: UIControlState.Normal)
        button.setImage(UIImage(named: "\(imgNamed)_highlighted"), forState: .Highlighted)
        
        //setBackgroundImage 与 backgroundColor 的差别： backgroundColor 这种方法相当于 把 image 渲染到 button 上边。setBackgroundImage 又添加了一个 imgeView 到 button 上边，因此当 button 被选中的时候，会出现高亮状态的渲染效果。
        button.backgroundColor = UIColor(patternImage: UIImage(named: "compose_toolbar_background")!)
        // button.setBackgroundImage(UIImage(named: "compose_toolbar_background"), forState: UIControlState.Normal)
        // button.setBackgroundImage(UIImage(named: "compose_toolbar_background"), forState: .Highlighted)
        // 使用 addSubview(button) 添加 button 不能显示出来 toolBar
        addArrangedSubview(button)
    }
    
    
    
    // toolBar 点击执行的事件
    @objc private func childButtonClick(button: UIButton) {
        // 点击 toolBar 上边的按钮后，就调用执行 toolBar 的闭包
        buttonClickCloures!(type: FXComposeToolBarButtonType(rawValue: button.tag)!)
    }

}
